package com.teamwings.modules.design.service;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.teamwings.ctrls.entity.DatabaseTable;
import com.teamwings.ctrls.entity.DatabaseTableWithColumns;
import com.teamwings.modules.design.vo.FormTableVo;
import com.teamwings.modules.design.vo.FormVo;
import com.teamwings.modules.head.entity.FormTableHead;

import java.util.List;

/**
 * <p>
 * 表单设计服务类
 * </p>
 *
 * @author admin
 * @since 2021-05-06
 */
public interface IDesignService {

    /**
     * 保存表单
     */
    void save(String jsonFormVo, FormTableHead head, String tableRemarks);

    /**
     * 编辑表单
     */
    void edit(String jsonFormVo, String tableRemarks);

    /**
     * 获取表单设计列表
     */
    IPage<FormVo> page(Long page, Long pageSize, String key, String cateId);

    void cloneForm(String tableHeadId, String newTableName);


    List<FormTableVo> getLatestListByFormIds(List<String> headIds);

    /**
     * 获取最新的表单设计列表，
     *  如果form_table_code中存在两条table_version，table_head_id相等的数据（一般是开发自己插入的数据导致的），
     *  那么这个方法会返回两条相同的数据，解决办法是去数据库删除其中一条即可。
     * @return
     */
    List<FormTableVo> getLatestList();

    List<DatabaseTable> allTable();

    List<DatabaseTableWithColumns> allTableWithColumns();

    DatabaseTableWithColumns getTableWithColumns(String tableName);

    /**
     * 根据 jsonFormVo和tableName生成数据表
     *
     * @param jsonFormVo
     * @param tableName
     */
    void createDesignTable(String jsonFormVo, String tableName);

    /**
     *
     * @param jsonForm   表单设计
     * @param name       模板名称
     * @param forceSave  是否强制保存
     */
    void saveWithTemplate(String jsonForm, String name, Boolean forceSave);
}
